iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0
Software Development

從零開始學 Python系列 第 6

Day6 - for 與 while 迴圈:讓程式自動重複的魔法

  • 分享至 

  • xImage
  •  

今天的學習內容:

今天我學會了 Python 中兩種常見的迴圈結構:for 迴圈與 while 迴圈。程式不再是一次性地執行,而是可以根據條件重複做同樣的事情,讓整個邏輯更有節奏感!

  • for 迴圈:適合用在「已知次數」的情況,例如:
for i in range(5):
    print("第", i + 1, "次 Hello!")

輸出:
螢幕擷取畫面 2025-08-08 125734

  • while 迴圈:適合用在「不知道會執行幾次、直到滿足條件才停止」的情況,例如:
count = 0
while count < 5:
    print("還沒滿五次喔")
    count += 1

螢幕擷取畫面 2025-08-08 130852

  • break 可以中斷迴圈,continue 則是跳過當次繼續下一輪。

實作

1. 倒數計時器(for,從 5 倒數到 1)

for i in range(5, 0, -1):
    print(i)
print("時間到!")

range() 的使用:range(5) 是從 0 開始到 4,總共 5 次。

2. 九九乘法表(巢狀 for)

for i in range(1, 10):
    for j in range(1, 10):
        print(f"{i} x {j} = {i*j}", end="\t")
    print()

3. 猜數字遊戲(while + break)

answer = "7"
guess = ""

while True:
    guess = input("猜一個數字:")
    if guess == answer:
        print("猜對了!")
        break
    else:
        print("再試一次~")

while 要小心無限迴圈!如果忘記在迴圈裡加上變化條件的話,程式就會一直跑下去不會停。

學習心得

今天學會了for迴圈與while迴圈,讓程式能夠根據條件自動重複執行動作。透過這個單元,我寫出了倒數計時器、九九乘法表以及猜數字的高互動性小遊戲,讓我再次感覺到Java的噩夢!當初做出這些遊戲的時候感到很驚奇,幾行的英文加數字就可以跑出這些厲害的東西。但說到for與while迴圈,不難想到的就是「排序法」!當遇上巢狀迴圈,i要順著走j要逆著走,i++,j--的更是難上加難。就算花了很多時間理解,也還是不太敢寫,覺得自己一不小心就會錯誤百出。所以,我想藉由這次,再次理解Java的排序法以及Python的排序法。當作是這個單元的進階挑戰!

先回顧一下Java的九九乘法表:

for (int i = 1; i <= 9; i++) {
    for (int j = 1; j <= 9; j++) {
        System.out.print(i + " x " + j + " = " + (i * j) + "\t");
    }
    System.out.println();
}

氣泡排序(Java):

public class BubbleSort {                  
    public static void main(String[] args) {   
        int[] arr = {64, 25, 12, 22, 11};      

        int n = arr.length;                    // 取得陣列的長度,存入變數 n

        for (int i = 0; i < n - 1; i++) {       // 外層迴圈控制回合次數,總共要跑 n-1 回合
            for (int j = 0; j < n - 1 - i; j++) { // 內層迴圈控制每回合的比較次數,會逐次減少
                if (arr[j] > arr[j + 1]) {       // 比較相鄰的兩個元素
                    // 如果前一個比後一個大,就交換兩個元素
                    int temp = arr[j];          // 暫存 arr[j] 的值
                    arr[j] = arr[j + 1];        // 把 arr[j + 1] 的值放進 arr[j]
                    arr[j + 1] = temp;          // 把暫存值放回 arr[j + 1]
                }
            }
        }

        System.out.print("排序後:");          
        for (int i = 0; i < n; i++) {           // 用另一個 for 迴圈印出排序後的結果
            System.out.print(arr[i] + " ");     
        }
    }
}

螢幕擷取畫面 2025-08-07 144359
螢幕擷取畫面 2025-08-07 144430

Java 元素 說明
int[] arr = {...} 宣告一個整數陣列並初始化
for 迴圈 控制重複執行的流程
if (arr[j] > arr[j + 1]) 判斷是否需要交換
temp Java 無法像 Python 一樣一行交換兩變數,所以需要使用「暫存變數」

Python中的氣泡排序:

# 定義一個氣泡排序函式
def bubble_sort(arr):
    n = len(arr)
    for i in range(n - 1):  # 外層控制回合數,共需 n-1 回合
        for j in range(n - 1 - i):  # 每回合比較次數逐漸減少
            if arr[j] > arr[j + 1]:  # 如果前一個比後一個大,就交換
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

# 測試資料
data = [64, 25, 12, 22, 11]
sorted_data = bubble_sort(data)

print("排序後的結果:", sorted_data)
功能 Java Python
陣列宣告 int[] arr = {} arr = []
變數型別 必須明確指定,如 int 不用指定型別,自動推斷
交換變數 需用 temp 中間變數 a, b = b, a 一行交換
陣列長度 arr.length len(arr)

我覺得最難的是要想他的結構以及要怎麼跑(i要怎麼遞增j要怎麼遞減、要跑幾次、n是甚麼k是甚麼)。當變數一多,我的腦袋常常就會卡住。
打開風塵在桌面上的eclipse,在建立檔案時甚至猶豫了一下python後面要加.py,java要加.java嗎?這次除了學習python之外,也一直在複習Java的語法,希望這30天除了學習python之外,Java也能有所收穫!
明天,我會繼續學習更進階的流程控制技巧,包括巢狀邏輯與 break、continue 這兩個關鍵指令,讓程式更有彈性、反應更即時!


上一篇
Day 5 - if、elif、else 條件判斷:讓程式具備「思考能力」!
下一篇
Day 7 - 巢狀邏輯與 break / continue:讓流程控制更靈活!
系列文
從零開始學 Python30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言